前幾天已經有跑一次MapReduce的範例了,現在就來簡單說一下MapReduce的原理。
Google一下其實很多資料,但是鐵人賽是對自我的實現!
還是要寫MapReduce的介紹,好好整理自己的思緒與想法。
MapReduce的概念主要是由Google所提出,
Hadoop就是參考這篇論文<<MapReduce: Simplied Data Processing on Large Clusters>>進行實作,不同在於底層的儲存的檔案系統為HDFS。
在解說Hadoop進行MapRdeuce的工作分配之前,先講一下MapRdeuce的原理:
1.首先要運算的檔案會先Split(分割)為多份,預設就是HDFS儲存檔案的分割區塊大小。
2.這些檔案分割區塊都會分給worker進行map的運算,map的運算結果會存在該worker的本地磁區。
3.接著會進行最精華的部分就是(shuffle),map所輸出的結果是以(key,value)型態所呈現,當有多個reduce的時候,就會將map產生的資料,根據key值進行排序或分群傳給要運算的reduce。
(這邊很精華...怕誤導各位..我還是提供學習的參考聯結)
http://blog.roodo.com/rocksaying/archives/10348123.html
http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/zh-TW//archive/mapreduce-osdi04.pdf
http://www.slideshare.net/waue/hadoop-map-reduce-3019713
以上連結如有不妥,我會盡快移除!
4.負責reduce的worker會根據他所需要的key值去跟map的worker讀取資料,按照reduce運算後,再將結果直接輸出到HDFS上。
Hadoop的MapReduce中,主要有兩個角色非常重要,就是JobTracker與TaskTracker,
JobTracker
負責分配與協調工作
TaskTracker
負責執行JobTracker所分配下來的任務,可能是map task也有可能是reduce task。
一個MapReuce任務在執行時,Client端會先把相關資訊與資源丟給jobTracker,JobTracker和TaskTracker會藉由heartbeat